<?php

class Autoevaluacion_Model_Autoevaluacion extends Model_Cna {
	
	/**
	 * Obtiene todas los cronogramas generales ordenados por fecha de forma descendiente
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function getCronogramasgnrales() {
	    $cronogramaTable = new Autoevaluacion_Model_DbTable_Cronogramagnral();
		return $cronogramaTable->fetchAll(null, "fechacrea DESC");
	}
	
	/**
	 * Almacena los datos de un cronograma general en la base de datos
	 * @param array $datos Los datos del cronograma
	 */
	public function guardarCronogramagnral($datos) {
		$cronogramaTable = new Autoevaluacion_Model_DbTable_Cronogramagnral();
		
		if(isset($datos["codcronograma"]) && !empty($datos["codcronograma"])) {
			$row = $cronogramaTable->find($datos["codcronograma"])->current();
			$row->setFromArray($datos)->save();
		} else {
			unset($datos["codcronograma"]);
			return $cronogramaTable->createRow($datos)->save();
		}
		
	}
	
	/**
	 * Carga los datos de un cronograma
	 * @param int $codcronograma
	 * @return Array con los datos del programa
	 */
	public function getCronogramagnral($codcronograma){
		$cronogramaTable = new Autoevaluacion_Model_DbTable_Cronogramagnral();
		return $cronogramaTable->find($codcronograma)->current()->toArray();
	}
	
	/**
	 * Eliminar cronograma
	 * @param $codcronograma
	 * @return boolean true o false
	 */
	public function eliminarCronogramagnral($codcronograma){
		$cronogramaTable = new Autoevaluacion_Model_DbTable_Cronogramagnral();
		return $cronogramaTable->find($codcronograma)->current()->delete();
	}
	
	/**
	 * Obtiene el listado del detalle de un cronograma general
	 * @param Array $datos
	 * @return Array con los datos del programa
	 */
	public function getDetallecronograma($datos) {
	    $cronogramaTable = new Autoevaluacion_Model_DbTable_Detallecronograma();
		return $cronogramaTable->getDetallecronograma($datos);
	}
	
	/**
	 * Almacena los datos de la tabla detallecronograma
	 * @param array $datos Los datos del detallecronograma
	 */
	public function guardarDetallecronograma($datos) {
		$cronogramaTable = new Autoevaluacion_Model_DbTable_Detallecronograma();
		
		if(isset($datos["coddetallecronograma"]) && !empty($datos["coddetallecronograma"])) {
			$row = $cronogramaTable->find($datos["coddetallecronograma"])->current();
			$row->setFromArray($datos)->save();
		} else {
			unset($datos["coddetallecronograma"]);
			return $cronogramaTable->createRow($datos)->save();
		}
	}
		
	/**
	 *
	 * Registra la asignación de programas a cronogramas
	 * @param integer $codcronograma
	 * @param integer $arr_asignar
	 * @throws Exception
	 */
	
    public function guardarProgramasCronograma($codcronograma,$arr_asignar){
        $cronogramaTable = new Autoevaluacion_Model_DbTable_Detallecronograma();
		$cronogramaTable->getAdapter()->beginTransaction();
        try {
			$datos["codcronograma"]=$codcronograma;
			foreach ($arr_asignar as $value){
                $datos["codprograma"]=$value;
			    $this->guardarDetallecronograma($datos);
			}
			$cronogramaTable->getAdapter()->commit();
		} catch (Exception $e) {
			$cronogramaTable->getAdapter()->rollBack();
			throw $e;
		}
	}
	
	/**
	 * Eliminar detallecronograma
	 * @param $coddetallecronograma
	 * @return boolean true o false
	 */
	public function eliminarDetallecronograma($coddetallecronograma){
		$cronogramaTable = new Autoevaluacion_Model_DbTable_Detallecronograma();
		return $cronogramaTable->find($coddetallecronograma)->current()->delete();
	}
		
	/**
	 *
	 * Elimina la asignación de programas acronogramas
	 * @param integer $codcronograma
	 * @param integer $arr_asignar
	 * @throws Exception
	 */
	
    public function eliminarProgramasCronograma($codcronograma,$arr_asignar){
        $cronogramaTable = new Autoevaluacion_Model_DbTable_Detallecronograma();
		$cronogramaTable->getAdapter()->beginTransaction();
        try {
			foreach ($arr_asignar as $value){
			    $this->eliminarDetallecronograma($value);
			}
			$cronogramaTable->getAdapter()->commit();
		} catch (Exception $e) {
			$cronogramaTable->getAdapter()->rollBack();
			throw $e;
		}
	}
}
